import tkinter as tk


class RelStrVar:
    def __init__(self, value: str = '', init_var=False):
        self._raw_str = value
        self._str_var = None
        if init_var:
            self.init_var(value=value)

    def var(self) -> tk.StringVar:
        return self._str_var

    def init_var(self, value: str = '', sync: bool = False):
        self._str_var = tk.StringVar(value=value)
        if sync:
            self._str_var.set(value=self._raw_str)

    def sync(self):
        if self._str_var:
            self._raw_str = self._str_var.get()

    def get_var(self):
        return self._str_var.get()

    def set_var(self, value: str = ''):
        self._str_var.set(value=value)

    def get_raw(self) -> str:
        return self._raw_str

    def set_raw(self, value: str):
        self._raw_str = value
